According to conventional database architectures, a client application interacts with an application executing on an application server. In response to requests received from the client application, the application acquires stored data from an underlying database system, performs any necessary processing, and provides a response to the client application.
Recently-developed database architectures integrate transaction-based (e.g., Online Transaction Processing) and analytics-based (e.g., Online Analytical Processing) processing with the underlying database system. These architectures support execution of applications within the database system (i.e., without the need of an application server). These database systems may support existing database programming languages, but some existing application code in certain programming languages may need to be adapted in order to perform as intended.
The aforementioned database systems may implement an in-memory database, whose high-performance processing allows performance-critical portions of business logic to be executed at the database level. An in-memory database may utilize columnar data storage, and existing application code may benefit from optimizations which leverage such columnar storage.
Adaptation and/or optimization of application code for execution in conjunction with databases may proceed via manual analysis or using static code-analyzing tools. Such approaches are unsatisfactory, in view of the typical enormous number of source code lines and the use of dynamic coding. Moreover, static code-analyzing tools exhibit a high rate of false positives, which eventually require manual analysis. Runtime checks are more efficient and effective, but it is not possible to cover all portions of code and every business aspect with such checks.